/**
* 不能以注释结尾，否则编译失败
*/
//------------------------------------- ├ variable ┆ └------------------------------------
@primary: #1890ff;
@warning: #e6a23c;
@success: #67c23a;
@danger: #f56c6c;
@info: #909399; // 次要文字
@text: #303133; // 主要文字
@text-desc: #606266; // 常规文字
@text-desc-low: #c0c4cc; // 占位文字
@el-primary: #409eff;
@sidebar: #384150; // 侧边栏背景色
@sidebar-inline: #303030; // 侧边栏未选中时的颜色
@header-bg: #fff;
@header-font: #333;
@logo-bg: #364152;
@logo-font: #fff;
@trigger-color: #000;

// drawer-sider 自定义
.ant-table-wrapper {
    overflow: auto;
}

.ant-drawer-body {
    height: calc(100% - 64px);
}

.ant-drawer.drawer-sider {
    .sider {
        box-shadow: none;
    }

    &.dark {
        .ant-drawer-content {
            background-color: rgb(0, 21, 41);
        }
    }

    &.light {
        box-shadow: none;

        .ant-drawer-content {
            background-color: #fff;
        }
    }

    .ant-drawer-body {
        padding: 0;
    }
}

.ant-menu {
    background: transparent !important;
}

.ant-menu:before,
.ant-menu:after {
    display: none !important;
}

.m-colorPicker {
    width: 100%;
}

.m-colorPicker .colorBtn {
    width: 100% !important;
}

#header-search {
    .ant-form-item {
        display: flex;
        margin-right: 0px;
        margin-bottom: 17px;
    }

    .ant-form-item-label {
        width: auto;
        padding-right: 8px;
    }

    .ant-form-item-control-wrapper {
        margin-right: 8px;
        flex: 1 1 0%;
    }
}


//------------------------------------- ├ function ┆ └------------------------------------

//------------------------------------- ├ 布局 ┆ └------------------------------------
// 盒子宽高
.size(@w, @h) {
    width: @w;
    height: @h;
}

// 最小尺寸, 兼容IE6
.min-width(@min-w) {
    min-width: @min-w;
    _width: @min-w;
}

.min-height(@min-h) {
    min-height: @min-h;
    _height: @min-h;
}

// 内联块级元素, 兼容IE6
.dib() {
    display: inline-block;
    *display: inline;
    *zoom: 1;
}

// 固定定位, 兼容IE6
.fixed() {
    position: fixed;
    _position: absolute;
    *zoom: 1;
}

// 统一盒模型
.border-box() {

    *,
    *:after,
    *:before {
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
    }
}

// 文字图片居中
.center(text-x) {
    text-align: center;
}

.center(text-y) {
    display: table-cell;
    vertical-align: middle;
}

// 块级元素水平居中
.center(auto-x) {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

// 居中, 不确定尺寸, 不兼容 IE6
.center(unknown) {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}

.center(unknown-x) {
    position: absolute;
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
}

.center(unknown-y) {
    position: absolute;
    top: 0;
    bottom: 0;
    margin-top: auto;
    margin-bottom: auto;
}

// 居中, 确定尺寸, 兼容 IE6
.center(known, @w, @h) {
    .size(@w, @h);
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -(@w / 2);
    margin-left: -(@h / 2);
}

.center(known-x, @w) {
    width: @w;
    position: absolute;
    left: 50%;
    margin-left: -(@h / 2);
}

.center(known-y, @h) {
    height: @h;
    position: absolute;
    top: 50%;
    margin-top: -(@w / 2);
}

// 居中, CSS3 平移方式, 兼容性不行
.center(translate) {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

// 居中, Flex 方式, 兼容性不行
.center(flex) {
    display: flex;
    align-items: center;
    justify-content: center;
}

// 多个子项布局
.list(float, @w: 25%) {
    float: left;
    width: @w;
}

.list(inline, @w: 25%) {
    .dib();
    width: @w;
}

.list(flex) {
    flex: 1;
}

// 遮罩层, 全屏遮罩、区域遮罩
.over-screen(fixed) {
    .fixed();
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

.over-screen(absolute) {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

// 容器宽高比固定
// 100* 1/1 = 100%
// 100* 3/4 = 75%
.fixed-ratio(@padding-top: 100%) {
    position: relative;
    width: 100%;
    height: 0;
    padding-top: @padding-top;

    img {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
    }
}

// 扩展点击区域
.extend-click() {
    position: relative;

    &:before {
        content: "";
        position: absolute;
        top: -10px;
        left: -10px;
        right: -10px;
        bottom: -10px;
    }
}

// 定宽居中页面布局
.layout-page(@width: 1200px) {
    width: @width;
    margin-left: auto;
    margin-right: auto;
}

// 侧边栏
// 主要区域：overflow: hidden; margin-left: xx; margin-right: xx;
.sidebar(left, @width) {
    position: absolute;
    top: 0;
    left: 0;
    width: @width;
}

.sidebar(right, @width) {
    position: absolute;
    top: 0;
    right: 0;
    width: @width;
}

//------------------------------------- ├ 字体 ┆ └------------------------------------
// 字体大小
.fz(@fz) {
    font-size: @fz;
}

// 字体大小与行高
.fz(@fz, @lh) {
    font-size: @fz;
    line-height: @lh;
}

// 字体大小、行高、高度
.fz(@fz, @h, @lh: @h) {
    font-size: @fz;
    height: @h;
    line-height: @lh;
}

// 行高与高度
.lh(@h, @lh: @h) {
    height: @h;
    line-height: @lh;
}

// 字体颜色, 包括链接与非链接
.color(@color) {
    color: @color;
}

// 字体颜色 + 自身 Hover
.color(@color, @hovercolor) {
    color: @color;

    &:hover {
        color: @hovercolor;
    }
}

// 字体颜色 + 链接 Hover
.color(@color, @acolor, @hovercolor) {
    color: @color;

    a {
        color: @acolor;

        &:hover {
            color: @hovercolor;
        }
    }
}

// 正常字体样式
.normal-font() {
    font-weight: normal;
    font-style: normal;
}

// 辅助性文字（灰色）
.assist-font(@color: #b0b0b0, @fz: 14px) {
    color: @color;
    font-size: @fz;
}

// 禁止换行, 文本溢出省略号显示 (一行)
.ellipsis() {
    white-space: normal;
    word-wrap: break-word;
    word-break: break-all;
    -o-text-overflow: ellipsis;
    -ms-text-overflow: ellipsis;
    text-overflow: ellipsis;
    overflow: hidden;
}

// 文本溢出省略号显示 (多行)
// 只支持 webkit 浏览器, 解决方案：高度 = 行高*行数
// height: 90px; line-height: 30px; -webkit-line-clamp: 3;
.ellipsis-mult(@n: 3) {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: @n;
    word-break: break-all;
    -o-text-overflow: ellipsis;
    -ms-text-overflow: ellipsis;
    text-overflow: ellipsis;
    overflow: hidden;
}

// 书写模式：牌匾从右至左水平单行排版效果、文笺从右至左、从上至下排版效果
.retext(x) {
    direction: rtl;
    unicode-bidi: bidi-override;
}

.retext(y) {
    writing-mode: tb-rl;
    writing-mode: vertical-rl;
}

// 文字透明
.transparent-text() {
    font: 0/0 serif;
    text-shadow: none;
    color: transparent;
}

// 文字隐藏（常用于SEO优化）
// xx

.hidden-text() {
    text-indent: -9999px;
    overflow: hidden;
    text-align: left;
}

// 文字外发光效果
.glow-text(@r: 10px, @color: gold) {
    text-shadow: 0 0 @r @color;
}

//------------------------------------- ├ 图像 ┆ └------------------------------------
// 用 max-width 来防止图片撑破容器
.max-img() {
    display: block;
    max-width: 100%;
    height: auto;
}

// 2x 3x 背景图片
.bg-image(@url) {
    background-image: url("@url + '@2x.png'");

    @media (-webkit-min-device-pixel-ratio: 3),
    (min-device-pixel-ratio: 3) {
        background-image: url("@url + '@3x.png'");
    }
}

// 全屏大图背景
.fullscreen-bg(@url) {
    width: 100vw;
    height: 100vh;
    background: url(@url) no-repeat 50% 50%;
    background-size: cover;
}

// 滤镜: 将彩色照片显示为黑白照片
.grayscale() {
    filter: grayscale(100%);
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
}

//------------------------------------- ├ 动效 ┆ └------------------------------------
// 链接默认无下划线，hover后有下划线的样式
.hover-link() {
    text-decoration: none;

    &:hover {
        text-decoration: underline;
    }
}

// 将链接变成默认的文字样式
.unstyled-link() {
    color: inherit;
    cursor: inherit;
    text-decoration: inherit;

    &:active,
    &:focus {
        outline: none;
    }
}

// 盒子阴影
// box-shadow: 水平阴影的位置, 垂直阴影的位置, 模糊距离, 阴影的大小, 阴影的颜色, 阴影开始方向（默认是从里往外，设置inset就是从外往里）;
// box-shadow: h-shadow v-shadow blur spread color inset;
.box-shadow() {
    box-shadow: 0px 14px 26px 0px rgba(0, 0, 0, 0.1);
}

// 盒子 Hover
.box-hover() {
    // box-shadow: 0px 1px 2px 0px rgba(84, 107, 107, .4);
    transition: all 0.2s linear;

    &:hover {
        box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
        transform: translate3d(0, -2px, 0);
    }
}

.box-hover2() {
    transition: transform 0.5s ease;

    &:hover {
        transform: translateX(10px);
    }
}

// 三维闪动 bug 处理
.transform-fix() {
    -webkit-backface-visibility: hidden;
    -webkit-transform-style: preserve-3d;
}

// Animation
.ani(@name, @time: 1s, @ease: ease-in-out, @fillmode: forwards) {
    animation-name: @name;
    animation-duration: @time;
    animation-timing-function: @ease;
    animation-fill-mode: @fillmode;
}

//------------------------------------- ├ 功能 ┆ └------------------------------------
// 浮动, 兼容 IE6
.fl() {
    float: left;
    *display: inline;
    _display: inline;
}

.fr() {
    float: right;
    *display: inline;
    _display: inline;
}

// 清除浮动
.clearfix() {
    *zoom: 1;

    &:after {
        display: block;
        clear: both;
        content: "";
        visibility: hidden;
        height: 0;
    }
}

.clearfix(table) {
    *zoom: 1;

    &:before,
    &:after {
        content: " ";
        display: table;
        clear: both;
    }
}

// 禁止文本被选择
.user-select() {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

// 隐藏鼠标手势
.hide-cursor() {
    cursor: none !important;
}

// 鼠标禁用样式，但仍然可以触发事件
//

.disabled() {
    cursor: not-allowed;
}

// 禁用元素事件
// 1. 阻止任何点击动作的执行
// 2. 使链接显示为默认光标(cursor:default)
// 3. 阻止触发hover和active状态
// 4. 阻止JavaScript点击事件的触发
.pointer-events() {
    pointer-events: none;
}

// 模糊
.blur(@blur: 10px) {
    filter: blur(@blur);
    -webkit-filter: blur(@blur);
    -moz-filter: blur(@blur);
    -o-filter: blur(@blur);
    -ms-filter: blur(@blur);
    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='@{blur}');
    *zoom: 1;
}

// 透明度, 兼容 IE8
.opacity(@opacity: 20) {
    opacity: @opacity / 100;
    filter: alpha(opacity=@opacity);
}

// 用伪类来显示打印时 a 标签的链接
.print-link() {
    @media print {
        a[href]:after {
            content: " ("attr(href) ") ";
        }
    }
}

// 隔行换色
.zebra-lists(odd, @color) {
    &.odd {
        >li:nth-child(odd) {
            background-color: @color;
        }
    }
}

.zebra-lists(even, @color) {
    &.even {
        >li:nth-child(even) {
            background: green;
        }
    }
}

// 首字下沉
.first-letter(@font-size: 6em) {
    &::first-letter {
        float: left;
        line-height: 1;
        font-size: @font-size;
    }
}

// 特殊标记段落第一行
.first-line() {
    &::first-line {
        color: red;
    }
}

// 美化选中文本
.beauty-select() {
    &::selection {
        color: #fff;
        background-color: #6bc30d;
        text-shadow: none;
    }
}

// 美化占位符 placeholder 样式
.beauty-placeholder(@fz, @color: #999, @align: left) {
    &:-moz-placeholder {
        font-size: @fz;
        color: @color;
        text-align: @align;
    }

    &:-ms-input-placeholder {
        font-size: @fz;
        color: @color;
        text-align: @align;
    }

    &::-webkit-input-placeholder {
        font-size: @fz;
        color: @color;
        text-align: @align;
    }
}

// 美化占位符 placeholder 样式（自定义属性和值）
.beauty-placeholder(custom, @property, @value) {
    &:-moz-placeholder {
        @{property}: @value;
    }

    &:-ms-input-placeholder {
        @{property}: @value;
    }

    &::-webkit-input-placeholder {
        @{property}: @value;
    }
}

//------------------------------------- ├ 图形 ┆ └------------------------------------
// 三角形
.triangle(@width: 4px, @color: #000) {
    display: inline-block;
    width: 0;
    height: 0;
    vertical-align: middle;
    border-top: @width solid @color;
    border-left: @width solid transparent;
    border-right: @width solid transparent;
}

// 三角形箭头气泡效果, IE6-7 无表现
.arrow(top, @w: 10px, @color, @x: 50%) {
    position: relative;

    &:before {
        position: absolute;
        bottom: 100%;
        left: @x;
        content: " ";
        height: 0;
        width: 0;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
        border-bottom-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-left: unit(@margin, px);
    }
}

.arrow(right, @w: 10px, @color, @y: 50%) {
    position: relative;

    &:before {
        position: absolute;
        left: 100%;
        top: @y;
        content: " ";
        height: 0;
        width: 0;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
        border-left-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-top: unit(@margin, px);
    }
}

.arrow(bottom, @w: 10px, @color, @x: 50%) {
    position: relative;

    &:before {
        position: absolute;
        top: 100%;
        left: @x;
        content: " ";
        height: 0;
        width: 0;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
        border-top-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-left: unit(@margin, px);
    }
}

.arrow(left, @w: 10px, @color, @y: 50%) {
    position: relative;

    &:before {
        position: absolute;
        right: 100%;
        top: @y;
        content: " ";
        height: 0;
        width: 0;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
        border-right-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-top: unit(@margin, px);
    }
}


// 三角形箭头气泡效果, 带边框
.arrow-with-border(top, @w: 10px, @color, @border-w: 1px, @border-color, @x: 50%) {
    position: relative;

    &:before,
    &:after {
        bottom: 100%;
        left: @x;
        content: " ";
        height: 0;
        width: 0;
        position: absolute;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
    }

    &:after {
        border-bottom-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-left: unit(@margin, px);
    }

    &:before {
        border-bottom-color: @border-color;
        @arrbo: @w+ @border-w;
        border-width: unit(@arrbo, px);
        @margin-bo: -@arrbo;
        margin-left: unit(@margin-bo, px);
    }
}

.arrow-with-border(bottom, @w: 10px, @color, @border-w: 1px, @border-color, @x: 50%) {
    position: relative;

    &:before,
    &:after {
        top: 100%;
        left: @x;
        content: " ";
        height: 0;
        width: 0;
        position: absolute;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
    }

    &:after {
        border-top-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-left: unit(@margin, px);
    }

    &:before {
        border-top-color: @border-color;
        @arrbo: @w+ @border-w;
        border-width: unit(@arrbo, px);
        @margin-bo: -@arrbo;
        margin-left: unit(@margin-bo, px);
    }
}

.arrow-with-border(left, @w: 10px, @color, @border-w: 1px, @border-color, @y: 50%) {
    position: relative;

    &:before,
    &:after {
        top: @y;
        right: 100%;
        content: " ";
        height: 0;
        width: 0;
        position: absolute;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
    }

    &:after {
        border-right-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-top: unit(@margin, px);
    }

    &:before {
        border-right-color: @border-color;
        @arrbo: @w+ @border-w;
        border-width: unit(@arrbo, px);
        @margin-bo: -@arrbo;
        margin-top: unit(@margin-bo, px);
    }
}

.arrow-with-border(right, @w: 10px, @color, @border-w: 1px, @border-color, @y: 50%) {
    position: relative;

    &:before,
    &:after {
        top: @y;
        left: 100%;
        content: " ";
        height: 0;
        width: 0;
        position: absolute;
        pointer-events: none;
        border-style: solid;
        border-color: transparent;
    }

    &:after {
        border-left-color: @color;
        border-width: unit(@w, px);
        @margin: -@w;
        margin-top: unit(@margin, px);
    }

    &:before {
        border-left-color: @border-color;
        @arrbo: @w+ @border-w;
        border-width: unit(@arrbo, px);
        @margin-bo: -@arrbo;
        margin-top: unit(@margin-bo, px);
    }
}

//------------------------------------- ├ 组件 ┆ └------------------------------------
// 吸顶导航
.fix-header(@h: 70px) {
    .fixed();
    top: 0;
    left: 0;
    width: 100%;
    height: @h;
    z-index: 1000;
    // background-color: rgba(256, 256, 256, .92);
    // border-bottom: 1px solid rgba(7, 17, 27, 0.1);
    // box-shadow: 0px 0px 20px rgba(0,0,0,0.2);
}

// 吸底导航
.fix-header(@h: 70px) {
    .fixed();
    left: 0;
    bottom: 0;
    width: 100%;
    height: @h;
    z-index: 1000;
}

// 输入框
.input-text() {
    display: block;
    width: 100%;
    padding: 4px 8px;
    font-size: 14px;
    line-height: 1.42858;
    color: #333;
    border: 1px solid #ddd;
    background-color: #fff;
    border-radius: 3px;
    outline: none;
}

// 分割线
// |/-
.separator() {
    margin: 0 10px;
    color: #999;
    font-size: 14px;
}

// 分割线 / (面包屑导航)
.separator2() {
    &:before {
        padding: 0 5px;
        color: #ccc;
        content: "/\00a0";
    }
}

//

// 支付宝：我也是有底线的
.hr() {
    height: 1px;
    margin: 10px 0;
    border: 0;
    clear: both;
    background-color: #e2e2e2;
}

// 改装的 fieldset
// 返璞归真

.fieldset() {
    border-color: #d2d2d2;
    border-width: 1px 0 0;
    border-style: solid;

    legend {
        padding: 0 20px;
        text-align: center;
        font-size: 20px;
        font-weight: 300;
    }
}

// 引用区块（模仿 Layui）
// Lorem ipsum dolor sit amet.

.blockquote() {
    margin-bottom: 10px;
    padding: 15px;
    line-height: 22px;
    border-left: 5px solid #009688;
    border-radius: 0 2px 2px 0;
    background-color: #f2f2f2;
}

// 徽章 (椭圆、小圆点)
// 10
.badge(...) {
    position: relative;
    display: inline-block;
    font-size: 12px;
    color: #fff;
    background-color: #ff5722;
}

.badge(ellipse) {
    min-width: 8px;
    height: 18px;
    padding: 2px 6px;
    text-align: center;
    line-height: 18px;
    border-radius: 9px;
}

.badge(dot) {
    width: 8px;
    height: 8px;
    border-radius: 50%;
}

// 关闭按钮
// ×
.close() {
    position: relative;
    -webkit-appearance: none;
    padding: 0;
    cursor: pointer;
    background: 0 0;
    border: 0;
    font-size: 20px;
    font-weight: 700;
    line-height: 1;
    color: #000;
    text-shadow: 0 1px 0 #fff;
    filter: alpha(opacity=20);
    opacity: 0.2;

    &:hover {
        color: #000;
        text-decoration: none;
        cursor: pointer;
        filter: alpha(opacity=50);
        opacity: 0.5;
    }

    &:before {
        content: "";
        position: absolute;
        top: -10px;
        left: -10px;
        right: -10px;
        bottom: -10px;
    }
}

// 1 像素边框问题
.onepx(...) {
    position: relative;

    &:after {
        content: "";
        display: block;
        position: absolute;
        left: 0;
        width: 100%;
        border-top: 1px solid rgba(7, 17, 27, 0.1);
        transform: scaleY(0.5);
    }
}

.onepx(top) {
    &:after {
        top: 0;
    }
}

.onepx(bottom) {
    &:after {
        bottom: 0;
    }
}

.onepx-easy(top, @color: #ccc) {
    box-shadow: inset 0px -1px 1px -1px @color;
}

.onepx-easy(bottom, @color: #ccc) {
    box-shadow: inset 0px 1px 1px -1px @color;
}